U |
您所在的位置:网站首页 › boot mode中文翻译 › U |
前言:近期在学习U-Boot,学习过程不外乎学习文档,阅读代码。U-BOOT源码树提供的README文档讲得比较详细,可以作为一个起点,看了下网上似乎也没有完全的中文翻译,因此才有翻译的打算,一方面可以共享,另一方面今后自己查阅起来也比较方便。本系列翻译的内容来源于U-BOOT 1.3.4源码目录下的README文件,不足之处,还请各位大侠批评指正。 概述: ===== 本目录包含U- Boot的源代码。U-Boot是一个用于嵌入式单板的bootloader,支持PowerPC, ARM, MIPS及其它几种处理器。它可以安装在boot ROM中,用来对硬件进行初始化和测试,或者下载及运行应用代码。 U-Boot的开发与Linux联系紧密:有一部分代码来源于Linux内核代码树,两者有一些相同的头文件,并且U-Boot为支持Linux映像的启动也提供了特别的支持。 为了使该软件能易于配置及扩展,我们已经做了一些工作。比如所有操作命令都以相同的调用接口实现,这样便于添加新的命令。此外,你还可以在monitor上动态地加载及运行代码,而不是向monitor添加不太常用的代码(比如硬件测试程序)。 状态: ===== 对于在Makefile中存在配置的单板,一般是经过一定的测试,并可以为是"可工作的"。实际上,很多单板也正式地在生产中使用。 遇到问题时,请在CHANGELOG和CREDITS两个文件中查找一个具体的移植是由谁贡献的。MAINTAINERS文件列出了单板维护者。 获取帮助: ========= 如果你对U-Boot有疑问,或者想为U-Boot贡献,你应该向U-Boot邮件列表发送消息。在提问前,请搜索邮件列表的历史记录:http://lists.sourceforge.net/lists/listinfo/u-boot-users/ 获取源代码: =========== U-Boot源代码使用git仓库维护,地址为:git://www.denx.de/git /u-boot.git;你也可以在线浏览:http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git; a=summary 该页面的"snapshots"链接允许你下载任一版本的源码树。官方发布可以通过FTP下载:ftp://ftp.denx.de/pub/u-boot/ 预编译(并经过测试)的映像可以从这里下载:ftp://ftp.denx.de/pub/u-boot/images/ 我们来自哪里: ============= - 从8xxrom源代码开始 - 建立了 PPCBoot 项目 (http://sourceforge.net/projects/ppcboot) - 清理代码 - 让代码更易于添加自定义单板 - 可以添加其它类型的 [PowerPC] CPU - 扩展了函数,特别是: * 为 Linux 引导程序提供了扩展的接口 * 下载 S-Record * 从网络引导 * 从 PCMCIA / CompactFlash / ATA disk / SCSI ... 等设备引导 - 建立了ARMBoot项目 (http://sourceforge.net/projects/armboot) - 添加了其它CPU家族 (从ARM开始) - 建立了 U-Boot 项目 (http://sourceforge.net/projects/u-boot) - 当前项目的主页: http://www.denx.de/wiki/U-Boot 命名与拼写: =========== 本项目的官方名称为"Das U-Boot"。在所有文档中都应使用"U-Boot"。比如: 这是U-Boot项目的README文件。 文件名等,也应基于u-boot字符串。比如: include/asm-ppc/u-boot.h #include 变量名,宏定义等,也需要基于u_boot或者U_BOOT来定义。比如: U_BOOT_VERSION u_boot_logo IH_OS_U_BOOT u_boot_hush_start 版本编号: ========= U-Boot使用3级版本编号,包含一个版本,子版本及补丁级别:"U-Boot-2.34.5" 表示版本2,子版本34,补丁级别4。 补丁级别用于表示发行版本间的某个阶段,比如,官方发布版本的补丁级别总是0。 目录结构: ==================== - board 与单板相关的文件 - common 一些与架构无关的函数 - cpu 针对特定CPU的文件 - 74xx_7xx 针对Freescale MPC74xx 和 7xx CPU 的文件 - arm720t 针对ARM 720 CPU 的文件 - arm920t 针对ARM 920 CPU 的文件 - at91rm9200 针对Atmel AT91RM9200 CPU 的文件 - imx 针对Freescale MC9328 i.MX CPU 的文件 - s3c24x0 针对Samsung S3C24X0 CPU 的文件 - arm925t 针对ARM 925 CPU 的文件 - arm926ejs 针对ARM 926 CPU 的文件 - arm1136 针对ARM 1136 CPU 的文件 - at32ap 针对Atmel AVR32 AP CPU 的文件 - i386 针对i386 CPU 的文件 - ixp 针对Intel XScale IXP CPU 的文件 - leon2 针对Gaisler LEON2 SPARC CPU 的文件 - leon3 针对Gaisler LEON3 SPARC CPU 的文件 - mcf52x2 针对Freescale ColdFire MCF52x2 CPU 的文件 - mcf5227x 针对Freescale ColdFire MCF5227x CPU 的文件 - mcf532x 针对Freescale ColdFire MCF5329 CPU 的文件 - mcf5445x 针对Freescale ColdFire MCF5445x CPU 的文件 - mcf547x_8x 针对Freescale ColdFire MCF547x_8x CPU 的文件 - mips 针对MIPS CPU 的文件 - mpc5xx 针对Freescale MPC5xx CPU 的文件 - mpc5xxx 针对Freescale MPC5xxx CPU 的文件 - mpc8xx 针对Freescale MPC8xx CPU 的文件 - mpc8220 针对Freescale MPC8220 CPU 的文件 - mpc824x 针对Freescale MPC824x CPU 的文件 - mpc8260 针对Freescale MPC8260 CPU 的文件 - mpc85xx 针对Freescale MPC85xx CPU 的文件 - nios 针对Altera NIOS CPU 的文件 - nios2 针对Altera Nios-II CPU 的文件 - ppc4xx 针对AMCC PowerPC 4xx CPU 的文件 - pxa 针对Intel XScale PXA CPU 的文件 - s3c44b0 针对Samsung S3C44B0 CPU 的文件 - sa1100 针对Intel StrongARM SA1100 CPU 的文件 - disk 处理磁盘驱动器分区的代码 - doc 文档 (不要报太大期望^_^) - drivers 常用的设备驱动 - dtt 数字温度计及调节器的驱动 - examples 示范代码 - include 头文件 - lib_arm 针对ARM架构的文件 - lib_avr32 针对AVR32架构的文件 - lib_generic 针对所有架构的文件 - lib_i386 针对i386架构的文件 - lib_m68k 针对m68k架构的文件 - lib_mips 针对MIPS架构的文件 - lib_nios 针对NIOS架构的文件 - lib_ppc 针对PowerPC 架构的文件 - lib_sparc 针对SPARC架构的文件 - libfdt 支持平坦设备树(flattened device trees)的库文件 - net 网络代码 - post 上电自检 - rtc 实时时钟驱动 - tools 编译S-Record或U-Boot映像等相关工具 软件配置: ======================= 配置一般使用宏定义实现;使用宏的原因是避免可能存在的不可达代码。 有两类配置变量: * _OPTIONS_ 配置: 这类配置以"CONFIG_"开始,用户可以自行选择。 * _SETTINGS_ 配置: 这类配置以"CFG_"开始,与硬件相关。如果你不清楚它的含义,则不要随便修改。 后面我们会添加一个配置工具,可能类似于Linux Kernel配置工具。目前,我们还得手动完成配置,比如建一些软链接,编辑一些配置文件。下面我们使用TQM8xxL单板作为范例。 选择处理器架构与单板类型: ------------------------- 对所有已经支持的单板,有默认配置可以直接使用;只需要输入"make _config". 比如: 对一个 TQM823L 单板类型: cd u-boot make TQM823L_config 对于Cogent平台,你需要指定CPU类型;比如 "make cogent_mpc8xx_config"。还要根据cogent/README的指导来配置cogent目录。 配置选项: ---------------------- 配置依赖于单板类型与CPU类型;所有这些信息都保存在一个配置文件 "include/configs/.h" 中 比如: 对一个 TQM823L 单板,所有配置设置都在文件"include/configs/TQM823L.h"中。 有许多选项与对应的Linux内核配置选项名称相同,目的是之后容易做一个配置工具。 需要配置的选项如下: - CPU类型: 只能定义一个,比如CONFIG_MPC85XX. - 单板类型: 只能定义一个,比如CONFIG_MPC8540ADS. - CPU子卡类型: (如果定义了CONFIG_ATSTK1000) 只能定义一个,比如CONFIG_ATSTK1002 - CPU Module 类型 (如果定义了CONFIG_COGENT) 只能定义下列中的一个:CONFIG_CMA286_60_OLD --- FIXME --- 尚未经过测试的: CONFIG_CMA286_60, CONFIG_CMA286_21, CONFIG_CMA286_60P, CONFIG_CMA287_23, CONFIG_CMA287_50 - 母板类型: (如果定义了CONFIG_COGENT) 可以选择下列定义: CONFIG_CMA101, CONFIG_CMA102 - 母板I/O Modules: (如果定义了CONFIG_COGENT) 可以择下面的一个或多个定义: CONFIG_CMA302 - 母板选项: (如果定义了CONFIG_CMA101或者CONFIG_CMA102) 可以择下面的一个或多个定义: CONFIG_LCD_HEARTBEAT - 在LCD上每秒钟用旋转字符(即|/-/|/-/)更新字符的位置 - Board flavour: (如果定义了CONFIG_MPC8260ADS) CONFIG_ADSTYPE 可选值有: CFG_8260ADS - 最初的 MPC8260ADS CFG_8266ADS - MPC8266ADS CFG_PQ2FADS - PQ2FADS-ZU 或者 PQ2FADS-VR CFG_8272ADS - MPC8272ADS - MPC824X 家族成员 (如果定义了CONFIG_MPC824X) 只能定义下列中的一个: CONFIG_MPC8240, CONFIG_MPC8245 - 8xx CPU 选项: (如果使用MPC8xx CPU) CONFIG_8xx_GCLK_FREQ - 不推荐: 如果get_gclk_freq()不能工作(比如,没有32KHz PIT/RTC参考时钟),用该宏定义CPU时钟。 CONFIG_8xx_OSCLK - 锁相环输入时钟(EXTCLK或者XTAL/EXTAL) - 859/866/885 CPU 选项: (如果使用MPC859, MPC866或者MPC885 CPU): CFG_8xx_CPUCLK_MIN CFG_8xx_CPUCLK_MAX CONFIG_8xx_CPUCLK_DEFAULT 参见文档 doc/README.MPC866 CFG_MEASURE_CPUCLK 定义该宏来测量实际的CPU时钟,否则需要保证配置的正确性。通常用于单板确认锁相环是否锁定到预期的频率上。注意,本功能需要一个稳定的参考时钟 (32kHz RTC时钟或者CFG_8XX_XIN) - Intel Monahans 选项: CFG_MONAHANS_RUN_MODE_OSC_RATIO 定义Monahans的运行模式频率与晶振频率的比值. 有效值为8, 16, 24, 31. 核心频率为该值乘以13MHz. CFG_MONAHANS_TURBO_RUN_MODE_RATIO 定义Monahans turbo 模式频率与晶振频率的比值. 有效值为1(不定义的默认值)和2. 核心频率是上面计算出的值与该值的乘积. - Linux内核接口: CONFIG_CLOCKS_IN_MHZ U-Boot在内部使用Hz保存所有时钟信息。为了与旧的Linux内核(要求bd_info数据内的时钟是MHZ单位)达到二进制兼容,可以定义环境变量"clocks_in_mhz",U-Boot在传递给Linux内核前,将时钟数据转换为MHZ。 当定义了 CONFIG_CLOCKS_IN_MHZ 时,"clocks_in_mhz=1"的定义会自动包含到默认的环境中。 CONFIG_MEMSIZE_IN_BYTES [只与 MIPS 相关] 当向linux传递memsize参数时,有一些版本的单位是字节,其它的则是MB,如果定义 CONFIG_MEMSIZE_IN_BYTES,则参数单位为字节。 CONFIG_OF_LIBFDT 新的内核版本要求使用平坦设备树(基于开放固件的概念)将固件设置传递给内核 CONFIG_OF_LIBFDT * New libfdt-based support * 增加"fdt"命令 * bootm命令自动更新fdt OF_CPU - cpus节点的名称 OF_SOC - soc节点的名称 OF_TBCLK - timebase频率 OF_STDOUT_PATH - 终端设备的路径 带有QUICC引擎的单板需要将OF_QE设置为UCC MAC地址 CONFIG_OF_BOARD_SETUP 单板在将平坦设备树传递给内核前需要做额外的修改 CONFIG_OF_BOOT_CPU 该定义填充到boot参数头部的CPU部分。如果不定义,默认值为0。 - 串口: CFG_PL010_SERIAL 如果希望支持Amba PrimeCell PL010串口控制器,则定义此宏。 CFG_PL011_SERIAL 如果希望支持Amba PrimeCell PL011串口控制器,则定义此宏。 CONFIG_PL011_CLOCK 如果你使用Amba PrimeCell PL011串口控制器,将该宏定义为串口控制器的时钟频率。 CONFIG_PL01x_PORTS 如果你的单板使用Amba PrimeCell PL010 或者 PL011 串口控制器,定义该宏为一个列表(注:即数组初始化列表,该数组类型是一个指针数组),列表里每一项为串口的基地址。例子参见 "include/configs/versatile.h" - 终端接口: 根据单板的情况,定义一个串口终端(比如 CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2, CONFIG_8xx_CONS_SCC1, ...), 或者定义CONFIG_8xx_CONS_NONE来关闭串口终端 注意: 如果定义了 CONFIG_8xx_CONS_NONE, 串口例程必须在其它地方定义(比如 serial_init(), serial_getc(), ...) CONFIG_CFB_CONSOLE 使能终端设备的彩色帧缓冲. 需要下列定义 (cf. smiLynxEM, i8042, board/eltec/bab7xx) VIDEO_FB_LITTLE_ENDIAN 图像存储组织 (默认为大端序) VIDEO_HW_RECTFILL 图像芯片支持矩形填充(rectangle fill) (cf. smiLynxEM) VIDEO_HW_BITBLT 图像芯片支持位块传输(bit-blit) (cf. smiLynxEM) VIDEO_VISIBLE_COLS 可视像素列 (cols=pitch) VIDEO_VISIBLE_ROWS 可视像素行 VIDEO_PIXEL_SIZE 每像素字节数 VIDEO_DATA_FORMAT 图像数据格式 (0-5, cf. cfb_console.c) VIDEO_FB_ADRS 帧缓冲地址 VIDEO_KBD_INIT_FCT keyboard int fct (i.e. i8042_kbd_init()) VIDEO_TSTC_FCT test char fct (i.e. i8042_tstc) VIDEO_GETC_FCT get char fct (i.e. i8042_getc) CONFIG_CONSOLE_CURSOR 打开/关闭 光标绘制 (需要 blink timer cf. i8042.c) CFG_CONSOLE_BLINK_COUNT blink 间隔 (cf. i8042.c) CONFIG_CONSOLE_TIME 在右上角显示时间/日期信息 (需要 CONFIG_CMD_DATE) CONFIG_VIDEO_LOGO 在左上角显示Linux logo CONFIG_VIDEO_BMP_LOGO 使用bmp_logo.h作为logo(默认是linux_logo.h)。 需要 CONFIG_VIDEO_LOGO CONFIG_CONSOLE_EXTRA_INFO 除了logo外的其它单板信息 如果定义了CONFIG_CFB_CONSOLE, 视频终端是默认的i/o. 使用'console=serial'环境可以强制使用串口终端 如果定义了 CONFIG_SILENT_CONSOLE, 可以用'silent'环境变量屏蔽所有终端消息(包括U-Boot和Linux的输出!)。更多信息见doc/README.silent - 终端波特率: CONFIG_BAUDRATE - 以bps为单位 选择一个CFG_BAUDRATE_TABLE列出的波特率。 CFG_BAUDRATE_TABLE 见下面。 CFG_BRGCLK_PRESCALE, baudrate prescale - 中断驱动的串口输入: CONFIG_SERIAL_SOFTWARE_FIFO 仅用于PPC405GP。 使用一个中断处理程序来接收串口数据。它将使能并使用硬件握手(RTS/CTS)和串口内置FIFO。必须设置中断驱动的输入缓冲的字节数。 不定义该宏则禁用此特性, 包括禁用缓冲和硬件握手。 - 终端 UART 编号: CONFIG_UART1_CONSOLE 仅用于AMCC PPC4xx。 如果定义该宏,则使用内部UART1作为默认的U-Boot终端 (否则使用UART0) - 引导延时: CONFIG_BOOTDELAY - in seconds 在自动引导默认映像前的延时,设为-1表示禁用自动引导。 与CONFIG_BOOTDELAY相关的选项见 doc/README.autoboot. 这些选项都不是必需的。 CONFIG_BOOT_RETRY_TIME CONFIG_BOOT_RETRY_MIN CONFIG_AUTOBOOT_KEYED CONFIG_AUTOBOOT_PROMPT CONFIG_AUTOBOOT_DELAY_STR CONFIG_AUTOBOOT_STOP_STR CONFIG_AUTOBOOT_DELAY_STR2 CONFIG_AUTOBOOT_STOP_STR2 CONFIG_ZERO_BOOTDELAY_CHECK CONFIG_RESET_TO_RETRY - 自动引导命令: CONFIG_BOOTCOMMAND 只有定义了CONFIG_BOOTDELAY时,才需要定义这个宏。如果在引导延时内没有字符输入,则自动执行该宏定义的命令字符串。 CONFIG_BOOTARGS 该宏用于向bootm命令传递参数。CONFIG_BOOTARGS的值也被赋给环境变量"bootargs" CONFIG_RAMBOOT and CONFIG_NFSBOOT 两个宏值分别被赋给环境变量"ramboot"和"nfsboot"。用于简化从RAM和NFS两种引导途径之间的切换。 - 预引导命令: CONFIG_PREBOOT 如果定义了该选项,则在进行引导延时的计时前或者运行自动引导命令前,检查环境变量"preboot"是否存在,如果存在则进入交互模式。 该功能在"preboot"是由程序自动生成或修改的情况下比较有用。比如,LWMON单板的代码:当引导系统时,如果用户按下特定组合键,preboot会被修改。 - Serial Download Echo Mode: CONFIG_LOADS_ECHO 如果定义为1,在串口下载(使用"loads"命令)过程中,会对所有收到的字符进行回显。在某些终端上可能有用(如"cu"),但对大多数终端只是浪费时间。这个设置定义了"loads_echo"环境变量的默认值。 - Kgdb 串口波特率: (如果定义了 CONFIG_CMD_KGDB) CONFIG_KGDB_BAUDRATE 选择一个 CFG_BAUDRATE_TABLE 列出的波特率,见下面。 - Monitor 功能: 可以用#include "config_cmd_all.h"包含所有Monitor命令,并用#undef去掉不需要的命令。也可以使用"config_cmd_default.h",并#define需要的命令。 下列命令里,不带*号的是默认的命令配置 CONFIG_CMD_ASKENV * ask for env variable CONFIG_CMD_AUTOSCRIPT 支持自动脚本 CONFIG_CMD_BDI bdinfo CONFIG_CMD_BEDBUG * 包含 BedBug 调试器 CONFIG_CMD_BMP * BMP 支持 CONFIG_CMD_BSP * 单板相关命令 CONFIG_CMD_BOOTD bootd CONFIG_CMD_CACHE * icache, dcache CONFIG_CMD_CONSOLE coninfo CONFIG_CMD_DATE * 支持RTC, date/time... CONFIG_CMD_DHCP * 支持DHCP CONFIG_CMD_DIAG * 诊断 CONFIG_CMD_DOC * Disk-On-Chip Support CONFIG_CMD_DTT * Digital Therm and Thermostat CONFIG_CMD_ECHO echo arguments CONFIG_CMD_EEPROM * 支持EEPROM读写 CONFIG_CMD_ELF * bootelf, bootvx CONFIG_CMD_ENV saveenv CONFIG_CMD_FDC * 支持软驱 CONFIG_CMD_FAT * 支持FAT分区 CONFIG_CMD_FDOS * 支持Dos磁盘 CONFIG_CMD_FLASH flinfo, erase, protect CONFIG_CMD_FPGA 支持FPGA设备初始化 CONFIG_CMD_HWFLOW * RTS/CTS 硬件流控 CONFIG_CMD_I2C * I2C 串行总线支持 CONFIG_CMD_IDE * IDE 硬盘支持 CONFIG_CMD_IMI iminfo CONFIG_CMD_IMLS 列出所有找到的映像 CONFIG_CMD_IMMAP * 支持IMMR dump CONFIG_CMD_IRQ * irqinfo CONFIG_CMD_ITEST Integer/string test of 2 values CONFIG_CMD_JFFS2 * 支持JFFS2文件系统 CONFIG_CMD_KGDB * kgdb CONFIG_CMD_LOADB loadb CONFIG_CMD_LOADS loads CONFIG_CMD_MEMORY md, mm, nm, mw, cp, cmp, crc, base, loop, loopw, mtest CONFIG_CMD_MISC Misc functions like sleep etc CONFIG_CMD_MMC * MMC memory mapped support CONFIG_CMD_MII * MII实用命令 CONFIG_CMD_NAND * NAND支持 CONFIG_CMD_NET bootp, tftpboot, rarpboot CONFIG_CMD_PCI * pciinfo CONFIG_CMD_PCMCIA * PCMCIA支持 CONFIG_CMD_PING * 向网络主机发送 ICMP ECHO_REQUEST CONFIG_CMD_PORTIO * 端口I/O CONFIG_CMD_REGINFO * 寄存器dump CONFIG_CMD_RUN run command in env variable CONFIG_CMD_SAVES * save S record dump CONFIG_CMD_SCSI * SCSI 支持 CONFIG_CMD_SDRAM * 打印 SDRAM 配置信息 (需要CONFIG_CMD_I2C) CONFIG_CMD_SETGETDCR 支持访问DCR寄存器 (仅用于4xx) CONFIG_CMD_SPI * 支持SPI串行总线 CONFIG_CMD_USB * 支持USB CONFIG_CMD_VFD * 支持VFD (TRAB) CONFIG_CMD_CDP * 支持Cisco Discover Protocol CONFIG_CMD_FSL * 支持Microblaze FSL 例如: 如果你需要除了网络支持外的所有功能,可以配置如下: #include "config_cmd_all.h" #undef CONFIG_CMD_NET 其它命令: fdt (平坦设备树) 命令: CONFIG_OF_LIBFDT 注意: 如果你不清楚,请不要开启"icache"和"dcache"命令(配置参数CONFIG_CMD_CACHE)。在8xx或8260上无法使能数据 cache(访问IMMR区间必须不过cache),在其它使用数据cache作为初期栈和数据保存的系统里也不能禁用数据cache。 XXX - 该列表需要更新! - 看门狗: CONFIG_WATCHDOG 如果定义该变量,则使能看门狗支持。必须有平台特定的看门狗实现。对8xx和8260 CPU,SIU看门狗功能在SYPCR寄存器中使能。 - U-Boot版本: CONFIG_VERSION_VARIABLE 如果定义该宏,U-Boot创建一个"ver"环境变量,用于显示"version"命令所打印出的U-Boot版本。本变量是只读的。 - 实时时钟: 如果选择了 CONFIG_CMD_DATE,需要同时选择RTC的类型。使用下列定义中的一个: CONFIG_RTC_MPC8xx - 使用MPC8xx的内部RTC CONFIG_RTC_PCF8563 - 使用Philips PCF8563 RTC CONFIG_RTC_MC13783 - 使用MC13783 RTC CONFIG_RTC_MC146818 - 使用MC146818 RTC CONFIG_RTC_DS1307 - 使用Maxim, Inc. DS1307 RTC CONFIG_RTC_DS1337 - 使用Maxim, Inc. DS1337 RTC CONFIG_RTC_DS1338 - 使用Maxim, Inc. DS1338 RTC CONFIG_RTC_DS164x - 使用Dallas DS164x RTC CONFIG_RTC_ISL1208 - 使用Intersil ISL1208 RTC CONFIG_RTC_MAX6900 - 使用Maxim, Inc. MAX6900 RTC CFG_RTC_DS1337_NOOSC - 关闭DS1337的OSC输出 注意:如果RTC使用I2C,则需要配置I2C接口。参加见下面的I2C支持。 - 时间戳支持: 如果定义CONFIG_TIMESTAMP, 与映像相关的命令如bootm或iminfo会打印给定映像的时间戳(日期和时间)。如果定义了CONFIG_CMD_DATE,该选项自动使能。 - 分区支持: CONFIG_MAC_PARTITION, CONFIG_DOS_PARTITION, CONFIG_ISO_PARTITION 如果使能了IDE或SCSI支持(CONFIG_CMD_IDE 或者 CONFIG_CMD_SCSI),你必须至少配置一种分区类型的支持 - IDE 复位例程: CONFIG_IDE_RESET_ROUTINE - 在几个单板的配置文件中定义,但并未使用! CONFIG_IDE_RESET - 如果定义了,会调用下面的函数复位IDE: ide_set_reset(int reset) 这个函数必须在单板相关文件里定义。 - ATAPI 支持: CONFIG_ATAPI 定义该宏来支持ATAPI。 - LBA48 支持 CONFIG_LBA48 定义该宏可支持大于137GB的磁盘。需要检查CFG_64BIT_LBA, CFG_64BIT_VSPRINTF 和 CFG_64BIT_STRTOUL选项。如果不定义它们,LBA48使用32位变量,只能支持到最大2.1TB的磁盘。 CFG_64BIT_LBA: 如果使能,则IDE子系统使用64位的扇区地址,默认是32位。 - SCSI 支持: 当前只支持 SYM53C8XX SCSI 控制器; 定义 CONFIG_SCSI_SYM53C8XX 来使能。 可以调整CFG_SCSI_MAX_LUN [8], CFG_SCSI_MAX_SCSI_ID [7] 及 CFG_SCSI_MAX_DEVICE [CFG_SCSI_MAX_SCSI_ID * CFG_SCSI_MAX_LUN] 定义最大LUN, SCSI ID及目标的最大设备数。 定义CFG_SCSI_SYM53C8XX_CCF 以修正clock timing(时钟时序?) (80Mhz) - 网络支持 (PCI设备): CONFIG_E1000 支持Intel 8254x GE芯片。 CONFIG_E1000_FALLBACK_MAC 量产后,在EEPROM为空时的默认MAC地址。 CONFIG_EEPRO100 支持Intel 82557/82559/82559ER芯片。还可以定义CONFIG_EEPRO100_SROM_WRITE使能首次初始化时的EEPROM写流程. CONFIG_TULIP 支持 Digital 2114x 芯片。 还可以定义 CONFIG_TULIP_SELECT_MEDIA 支持单板特定的modem芯片初始化(KS8761/QS6611). CONFIG_NATSEMI 支持 National dp83815 芯片. CONFIG_NS8382X 支持 National dp8382[01] gigabit 芯片. - 网络支持 (其它设备): CONFIG_DRIVER_LAN91C96 支持 SMSC 的 LAN91C96 芯片. CONFIG_LAN91C96_BASE 将该宏定义为LAN91C96 I/O空间的物理地址。 CONFIG_LAN91C96_USE_32_BIT 定义该宏以使能32位寻址 CONFIG_DRIVER_SMC91111 支持 SMSC 的 LAN91C111 芯片 CONFIG_SMC91111_BASE 定义设备的物理地址 (I/O 空间) CONFIG_SMC_USE_32_BIT 如果数据总线是32位的,定义此宏 CONFIG_SMC_USE_IOFUNCS 如果定义则使用I/O函数,否则使用I/O宏 (有些硬件不能用宏) CONFIG_DRIVER_SMC911X 支持 SMSC 的 LAN911x 和 LAN921x 芯片 CONFIG_DRIVER_SMC911X_BASE 定义设备的物理地址 (I/O 空间) CONFIG_DRIVER_SMC911X_32_BIT 如果数据总线为32位,定义此宏 CONFIG_DRIVER_SMC911X_16_BIT 如果数据总线为16位,定义此宏。如果处理器自动将1个32位数据转化为2个16位数据,可以试着用 CONFIG_DRIVER_SMC911X_32_BIT. - USB 支持: 目前只支持UHCI host controller (PIP405, MIP405, MPC5200); 定义 CONFIG_USB_UHCI 来使能。 定义 CONFIG_USB_KEYBOARD 使能USB键盘支持,定义 CONFIG_USB_STORAGE 使能USB存储设备。 注意: 受支持的是USB键盘和USB软驱 (TEAC FD-05PUB). MPC5200 USB 需要附加的定义: CONFIG_USB_CLOCK 对 528 MHz 时钟: 0x0001bbbb CONFIG_USB_CONFIG 对差分驱动器: 0x00001000 对单边驱动器: 0x00005000 CFG_USB_EVENT_POLL 可以定义此宏来允许中断查询,否则使用异常中断。 - USB 设备: 如果希望使用USB终端,定义下面的宏。 在串口终端重建固件后,使用命令"setenv stdin usbtty; setenv stdout usbtty" 并接上USB线缆. "dmesg"命令应该会打印它找到一个新设备. 可以将usbtty环境变量设为gserial或者cdc_acm。前者让设备对USB host表现为Linux gserial设备,后者让设备表现为通用设备类抽象控制模型(Common Device Class Abstract Control Model)的串行设备。 如果你选择usbtty = gserial,应该能通过下面的命令枚举一个Linux host # modprobe usbserial vendor=0xVendorID product=0xProductID 如果你选择 cdc_acm, 将环境变量usbtty设为cdc_acm就行了. 你还可以在单板配置头文件中定义下面的宏。 CONFIG_USB_DEVICE 定义该宏来建立一个UDC设备 CONFIG_USB_TTY 如果定义该宏,则可以使用一个tty类型的设备与UDC设备通信 CFG_CONSOLE_IS_IN_ENV 如果你想将标准输入、标准输出、标准错误设为usbtty,定义该宏。 mpc8xx: CFG_USB_EXTC_CLK 0xBLAH 从外部时钟"blah"导出USB时钟。 - CFG_USB_EXTC_CLK 0x02 CFG_USB_BRG_CLK 0xBLAH 从brgclk导出USB时钟 - CFG_USB_BRG_CLK 0x04 如果你有一个USB-IF分配的VendorID,你可以将自己的vendor值定义在BoardName.h,或者直接定义在 usbd_vendor_info.h. 如果你不定义 CONFIG_USBD_MANUFACTURER, CONFIG_USBD_PRODUCT_NAME, CONFIG_USBD_VENDORID 和 CONFIG_USBD_PRODUCTID, U-Boot则默认对target host表现为Linux设备。 CONFIG_USBD_MANUFACTURER 定义公司的名称 - CONFIG_USBD_MANUFACTURER "my company" CONFIG_USBD_PRODUCT_NAME 定义设备的名称 - CONFIG_USBD_PRODUCT_NAME "acme usb device" CONFIG_USBD_VENDORID 将此宏定义为你从USB-IF(Implementors Forum)分配的Vendor ID。为避免污染USB名字空间,要求该值必须是唯一的 - CONFIG_USBD_VENDORID 0xFFFF CONFIG_USBD_PRODUCTID 定义设备的Product ID - CONFIG_USBD_PRODUCTID 0xFFFF - MMC 支持: U-Boot支持Intel PXA上的MMC控制器,定义CONFIG_MMC以使能支持。用与flash类似的方式将MMC设备映射到物理内存,即可在boot提示符下访问设备。 CONFIG_CMD_MMC使能命令行。MMC驱动支持FAT文件系统,可以通过CONFIG_CMD_FAT开启. - 日志Flash文件系统支持: CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE, CONFIG_JFFS2_NAND_DEV 用于NAND设备上的默认分区的参数 CFG_JFFS2_FIRST_SECTOR, CFG_JFFS2_FIRST_BANK, CFG_JFFS2_NUM_BANKS 用于NOR设备上的默认分区的参数 CFG_JFFS_CUSTOM_PART 定义此宏来创建一个私有分区,你必须提供一个函数: struct part_info* jffs2_part_info(int part_num) 如果只定义一个JFFS2分区,也可以定义下面的宏来禁用chpart命令。 #define CFG_JFFS_SINGLE_PART 1 在没有自定义分区的时候,这个是默认行为。 - 键盘支持: CONFIG_ISA_KEYBOARD 定义该宏以支持标准PC键盘 CONFIG_I8042_KBD 支持标准PC键盘,US(默认)和GERMAN键盘布局(通过"keymap=de"切换)。为cfb_console提供函数i8042_kbd_init, i8042_tstc和i8042_getc。支持光标闪烁。 - 视频支持: CONFIG_VIDEO 定义该宏以支持视频 (输出到视频). CONFIG_VIDEO_CT69000 支持 Chips & Technologies 69000 视频芯片 CONFIG_VIDEO_SMI_LYNXEM 使能Silicon Motion SMI 712/710/810 视频芯片. 视频输出由环境变量'videoout' (1 = LCD and 2 = CRT). 如果不定义videoout,默认为CRT 对CT69000 和 SMI_LYNXEM 驱动, 视频模式由环境变量'videomode'选择, 有两个选择: - "videomode=num" 'num' is a standard LiLo mode numbers. 支持下列标准模式 (* 为默认值): Colors 640x480 800x600 1024x768 1152x864 1280x1024 -------------+--------------------------------------------- 8 bits | 0x301* 0x303 0x305 0x161 0x307 15 bits | 0x310 0x313 0x316 0x162 0x319 16 bits | 0x311 0x314 0x317 0x163 0x31A 24 bits | 0x312 0x315 0x318 ? 0x31B -------------+--------------------------------------------- (i.e. setenv videomode 317; saveenv; reset;) - "videomode=bootargs" 所有视频参数从bootargs提取. (见 drivers/video/videomodes.c) CONFIG_VIDEO_SED13806 使能 Epson SED13806 驱动. 该驱动支持8bpp和16bpp模式(由CONFIG_VIDEO_SED13806_8BPP或 CONFIG_VIDEO_SED13806_16BPP定义) - 键盘支持: CONFIG_KEYBOARD 定义该宏来使能自定义键盘支持。它简单地调用drv_keyboard_init(),该函数需要在单板相关文件中提供。目前使用该宏的单板只有RBC823。 - LCD 支持: CONFIG_LCD 定义该宏以支持 LCD (输出至LCD); 同时从下列的显示支持中选择一种: CONFIG_ATMEL_LCD: HITACHI TX09D70VM1CCA, 3.5", 240x320. CONFIG_NEC_NL6448AC33: NEC NL6448AC33-18. Active, color, single scan. CONFIG_NEC_NL6448BC20 NEC NL6448BC20-08. 6.5", 640x480. Active, color, single scan. CONFIG_NEC_NL6448BC33_54 NEC NL6448BC33-54. 10.4", 640x480. Active, color, single scan. CONFIG_SHARP_16x9 Sharp 320x240. Active, color, single scan. It isn't 16x9, and I am not sure what it is. CONFIG_SHARP_LQ64D341 Sharp LQ64D341 display, 640x480. Active, color, single scan. CONFIG_HLD1045 HLD1045 display, 640x480. Active, color, single scan. CONFIG_OPTREX_BW Optrex CBL50840-2 NF-FW 99 22 M5 or Hitachi LMG6912RPFC-00T or Hitachi SP14Q002 320x240. Black & white. Normally display is black on white background; define CFG_WHITE_ON_BLACK to get it inverted. - Splash Screen 支持: CONFIG_SPLASH_SCREEN 如果设置该选项, 将检查环境变量"splashimage". 如果变量存在则显示一张BMP图像, 普通的logo, 版权及系统信息不再显示. "splashimage"指定了位图的存放地址. 终端也被重定向到"nulldev". 由于启动的早期就会加载Splash screen, 使用它可以实现安静的启动. - Gzip 压缩的BMP支持: CONFIG_VIDEO_BMP_GZIP 如果设置该选项, 除了支持标准BMP图像外, splashscreen或者bmp命令可以使用gzip压缩的BMP图像. - 压缩支持: CONFIG_BZIP2 如果设置了该选项,u-boot将包含对bzip2压缩映像的支持。如果不设置该选项,则只支持未压缩的或者gzip压缩的映像。 注意: bzip2 算法需要大量的RAM, 因此malloc区大小(通过CFG_MALLOC_LEN定义)至少为4MB。 - MII/PHY 支持: CONFIG_PHY_ADDR PHY在MII总线上的地址。 CONFIG_PHY_CLOCK_FREQ (ppc4xx) MII总线的时钟频率。 CONFIG_PHY_GIGE 如果设置该选项,则支持GE PHY的速度/双工检测 CONFIG_PHY_RESET_DELAY 有一些PHY (如Intel LXT971A) 在复位后需要经过一定的时延才能访问MII寄存器,需要设置该宏。该设置的单位为usec (LXT971A至少需设为300usec)。 CONFIG_PHY_CMD_DELAY (ppc4xx) 有一些PHY (如Intel LXT971A) 在发起MII命令时,需要额外的时延才能读取MII状态寄存器。 - 以太网支持: CONFIG_ETHADDR CONFIG_ETH2ADDR CONFIG_ETH3ADDR 为对应的以太网接口定义一个默认的MAC地址, 当不能自动确定时使用该定义. - IP 地址: CONFIG_IPADDR 为默认的以太网接口定义一个默认的IP地址(在没有确定IP地址的时候使用,比如通过bootp确定IP地址)。 - 服务器 IP 地址: CONFIG_SERVERIP 定义默认的TFTP服务器IP地址。在使用"tftboot"命令时,将使用该地址连接TFTP服务器。 - Multicast TFTP Mode: CONFIG_MCAST_TFTP 定义该宏以支持组播TFTP(按rfc-2090); 比如与atftp工作. 可以允许从多个目标tftp同时下载相同的boot image. 注意: 使用的以太网驱动必须提供函数mcast()支持加入/离开一个组播组. CONFIG_BOOTP_RANDOM_DELAY - BOOTP 恢复模式: CONFIG_BOOTP_RANDOM_DELAY 如果你的网络中有多个系统使用BOOTP启动, 你可能需要避免出现所有系统同时发送BOOTP请求的情况(如因电源恢复产生的系统同时上电), 将导致BOOTP服务器过载. 定义 CONFIG_BOOTP_RANDOM_DELAY 将在发送BOOTP请求前插入随机延时. 插入规则如下: 1st BOOTP request: delay 0 ... 1 sec 2nd BOOTP request: delay 0 ... 2 sec 3rd BOOTP request: delay 0 ... 4 sec 4th and following BOOTP requests: delay 0 ... 8 sec - DHCP 高级选项: 可以定义下列CONFIG_BOOTP_*宏来微调DHCP的功能: CONFIG_BOOTP_SUBNETMASK CONFIG_BOOTP_GATEWAY CONFIG_BOOTP_HOSTNAME CONFIG_BOOTP_NISDOMAIN CONFIG_BOOTP_BOOTPATH CONFIG_BOOTP_BOOTFILESIZE CONFIG_BOOTP_DNS CONFIG_BOOTP_DNS2 CONFIG_BOOTP_SEND_HOSTNAME CONFIG_BOOTP_NTPSERVER CONFIG_BOOTP_TIMEOFFSET CONFIG_BOOTP_VENDOREX CONFIG_BOOTP_SERVERIP - TFTP服务器由serverip环境变量指定, 而不是BOOTP服务器. CONFIG_BOOTP_DNS2 - 当客户端从DHCP服务器请求DNS serverip时, 允许向客户端提供多个DNS服务器地址. 如果使能 CONFIG_BOOTP_DNS2, 辅助DNS服务器地址将存在环境变量"dnsip2"里. 当定义了CONFIG_BOOTP_DNS时, 主要DNS服务器地址总是存在变量"dnsip"中. CONFIG_BOOTP_SEND_HOSTNAME - 有些DHCP服务器可以动态更新DNS服务器,这个功能需要DHCP请求者的hostname. 如果定义了CONFIG_BOOTP_SEND_HOSTNAME, "hostname"环境变量的内容将根据选项12传递给DHCP服务器. CONFIG_BOOTP_DHCP_REQUEST_DELAY 设置在收到"DHCP Offer"与发送"DHCP Request"间的32位延时(微秒单位 microsecond). 这规避了某些DHCP服务器不能100%响应"DHCP请求"的问题. 比如, 在180MHz的AT91RM9200处理器上,这个延时至少为1500 usec, 才能保证Windows Server 2003 DHCP服务器100%响应. 我建议定义在50,000 usec以上是比较安全的. 否则只能指望后面的重试会成功. 当然, DHCP超时与重试过程需要更长的时延. - CDP 选项: CONFIG_CDP_DEVICE_ID The device id used in CDP trigger frames. CONFIG_CDP_DEVICE_ID_PREFIX 添加到MAC地址的2个字符前缀. CONFIG_CDP_PORT_ID 包含端口ascii名称的printf格式串. 一般设为"eth%d", 对第一个以太网口为eth0, 对第二个以太网口为eth1等等. CONFIG_CDP_CAPABILITIES 表示设备能力的32位整数. 0x00000010 表示普通的不转发的主机. CONFIG_CDP_VERSION 包含软件版本的ascii字符串. CONFIG_CDP_PLATFORM 包含平台名称的ascii字符串. CONFIG_CDP_TRIGGER A 32bit integer sent on the trigger. CONFIG_CDP_POWER_CONSUMPTION A 16bit integer containing the power consumption of the device in .1 of milliwatts. CONFIG_CDP_APPLIANCE_VLAN_TYPE VLAN id - Status LED: CONFIG_STATUS_LED 有几个配置可以用LED显示当前的状态. 比如, 在运行U-Boot代码时, LED快闪, 收到BOOTP应答时, 停止快闪, 在运行linux内核时慢闪(由linux内核的状态LED驱动支持). 定义 CONFIG_STATUS_LED 可以打开U-Boot的这个功能. - CAN Support: CONFIG_CAN_DRIVER 定义 CONFIG_CAN_DRIVER 在支持 CAN 的系统上使能驱动支持(可选), 比如 TQM8xxL. - I2C 支持: CONFIG_HARD_I2C | CONFIG_SOFT_I2C 使能I2C串行总线命令. 定义任一个宏可以在选择的CPU内包含相应的I2C驱动(但不能同时定义). 可以在u-boot命令行下使用i2c命令(只要在CONFIG_COMMANDS中设置了CONFIG_CMD_I2C),并与基于 i2c的实时时钟芯片通讯。命令接口的说明见common/cmd_i2c.c. CONFIG_I2C_CMD_TREE 是一个推荐配置,它将所有i2c命令置于一个单独的'i2c'根命令下。老的'imm', 'imd', 'iprobe'等命令已经过时,以后可能会删除。 CONFIG_HARD_I2C 选择一个I2C控制器硬件。 CONFIG_SOFT_I2C 配置u-boot使用软件(即bit-banging)驱动代替CPM或相似的I2C支持。 当你定义了CONFIG_HARD_I2C 或者 CONFIG_SOFT_I2C后,还有其它几个数值也需要定义。 两种定义下都需要再定义 CFG_I2C_SPEED 为你预定的i2c总线运行频率(Hz单位),定义CFG_I2C_SLAVE为本节点的地址(即CPU的i2c节点地址)。 目前,u-boot在mpc8xx上的i2c代码(cpu/mpc8xx/i2c.c)将CPU设为主节点,因此地址应设为0(见手册,如 MPC823e User's Manual p.16-473)。将CFG_I2C_SLAVE设为0。 对CONFIG_HARD_I2C,上面就是所有需要的设置。 如果你使用软件i2c接口(CONFIG_SOFT_I2C),还需要定义下列宏(例子取自include/configs /lwmon.h): I2C_INIT (可选). 定义用于使能i2c控制器或配置端口的命令。 eg: #define I2C_INIT (immr->im_cpm.cp_pbdir |= PB_SCL) I2C_PORT (仅用于MPC8260 CPU). 定义要使用的I/O (the code assumes both bits are on the same port). 有效的值为0..3,对应端口A..D。 I2C_ACTIVE 使I2C数据线处于激活状态(driven)的必要代码。如果数据线对collector是开放的,定义可以为空。 eg: #define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA) I2C_TRISTATE 使I2C数据线处于三态(非激活)的必要代码。如果数据线对collector是开放的,定义可以为空。 eg: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA) I2C_READ 定义一段代码,在I2C数据线为高时返回TRUE,为低时返回FALSE。 eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0) I2C_SDA(bit) 如果 为TRUE,将I2C总线置为高,否则置为低。 eg: #define I2C_SDA(bit) / if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; / else immr->im_cpm.cp_pbdat &= ~PB_SDA I2C_SCL(bit) 如果 为TRUE,将I2C时钟线置为高,否则置为低。 eg: #define I2C_SCL(bit) / if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; / else immr->im_cpm.cp_pbdat &= ~PB_SCL I2C_DELAY 每个时钟周期会调用该延时4次,因此它控制了数据传输速率。数据速率为 1 / (I2C_DELAY * 4)。通常定义成下面的样子: #define I2C_DELAY udelay(2) CFG_I2C_INIT_BOARD 当单板在i2c总线正在传输时复位,芯片会认为当前传输仍然在进行。对一些单板而言,直接访问i2c SCLK线是可行的,可以将处理器引脚作为GPIO使用,或者另连一根引脚连到总线上。如果定义了该选项,boards/xxx/board.c中自定义的i2c_init_board()例程会在boot过程较早阶段执行。 CONFIG_I2CFAST (仅用于PPC405GP|PPC405EP) 该选项使能u-boot基于环境变量'i2cfast'配置bd_info结构体内的bi_iic_fast[]标志。(见 i2cfast) CONFIG_I2C_MULTI_BUS 该选项允许使用多个I2C总线,每个总线必须有一个控制器。不论在什么时候,只有一个总线是激活的。要切换到不同的总线,使用'i2c dev'命令。注意总线编号从0开始。 CFG_I2C_NOPROBES 当使用'i2c probe'命令时(或者老的'iprobe'命令),跳过本选项指定的一组I2C设备。如果设置了CONFIG_I2C_MULTI_BUS,表示指定一组总线-设备对,否则表示设备地址的一维数组。 e.g. #undef CONFIG_I2C_MULTI_BUS #define CFG_I2C_NOPROBES {0x50,0x68} 将忽略地址 0x50 和 0x68 #define CONFIG_I2C_MULTI_BUS #define CFG_I2C_MULTI_NOPROBES {{0,0x50},{0,0x68},{1,0x54}} 将忽略总线0上的地址0x50和0x68,总线1上的地址0x54 CFG_SPD_BUS_NUM 如果定义了宏,则表示DDR SPD的I2C总线号,如果没有定义,U-Boot假定SPD在I2C总线0。 CFG_RTC_BUS_NUM 如果定义了宏,则表示RTC的I2C总线号,如果没有定义,U-Boot假定RTC在I2C总线0。 CFG_DTT_BUS_NUM 如果定义了宏,则表示DTT的I2C总线号,如果没有定义,U-Boot假定DTT在I2C总线0。 CONFIG_FSL_I2C 如果想使用Freescale的I2C驱动(drivers/i2c/fsl_i2c.c),定义该宏。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |